package br.com.fox.iebav.session;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.model.SelectItem;
import javax.inject.Named;
import br.com.fox.iebav.controller.command.SalvarLote;
import br.com.fox.iebav.dao.LicitacaoDAO;
import br.com.fox.iebav.dao.SituacaoLoteDAO;
import br.com.fox.iebav.dao.UnidadeLanceDAO;
import br.com.fox.iebav.entity.Licitacoes;
import br.com.fox.iebav.entity.Lotes;
import br.com.fox.iebav.entity.Situacoeslote;
import br.com.fox.iebav.entity.Unidadeslance;
import br.com.fox.iebav.session.abstractsession.AbstractSession;

@Named("loteBeanSession")
@SessionScoped
public class LoteBeanSession extends AbstractSession implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
//	ATRIBUTOS
	private List<Lotes> lotesList;
	private Lotes loteSelecionado;
	private List<SelectItem> unidadeLanceList,licitacaoList,situacaoList;
	
	private @EJB UnidadeLanceDAO unidadeLanceDAO;
	private @EJB SituacaoLoteDAO situacaoLoteDAO;
	private @EJB LicitacaoDAO licitacaoDAO;
	
//	CONTROLLER COMMAND
	private @EJB SalvarLote salvarLote;
	private Map<String, Object> resultMap;
	
	
	@PostConstruct
	public void init()
	{
		setLoteSelecionado(new Lotes());
		carregarLotes();
		redirecionarURL("lotes.java");
	}		
	
	public void carregarLotes()
	{
		setLotesList( salvarLote.getLoteDAO().findAll() );
	}
	
	public void carregarUnidadesLance()
	{
		setUnidadeLanceList(new ArrayList<SelectItem>());
		List<Unidadeslance> l = unidadeLanceDAO.findAll();
		for(Unidadeslance s : l)
			getUnidadeLanceList().add(new SelectItem(s,s.getNome()));
	}
	
	public void carregarSituacoesLote()
	{
		setSituacaoList(new ArrayList<SelectItem>());
		List<Situacoeslote> l = situacaoLoteDAO.findAll();
		for(Situacoeslote s : l)
			getSituacaoList().add(new SelectItem(s,s.getNome()));
	}
	
	public void carregarLicitacoes()
	{
		setLicitacaoList(new ArrayList<SelectItem>());
		List<Licitacoes> l = licitacaoDAO.findAll();
		for(Licitacoes s : l)
			getLicitacaoList().add(new SelectItem(s,s.getEdital()));
	}
	
	public void abrirLoteSelecionado()
	{
		carregarSituacoesLote();
		carregarUnidadesLance();
		carregarLicitacoes();
		carregarLotes();
		redirecionarURL("lotePersistencia.java");
	}
	
	public void novoLote()
	{
		setLoteSelecionado(new Lotes());
		redirecionarURL("lotePersistencia.java");
	}
	
	public void salvarLote()
	{
		resultMap = salvarLote.execute(getLoteSelecionado());
		if( ( (Boolean) resultMap.get("resultado") ) )
			facesMensagens(FacesMessage.SEVERITY_INFO,((String)resultMap.get("mensagem")),"");
		else
			facesMensagens(FacesMessage.SEVERITY_ERROR,((String)resultMap.get("mensagem")),"");
		carregarLotes();
	}

	public List<Lotes> getLotesList() {
		return lotesList;
	}

	public void setLotesList(List<Lotes> lotesList) {
		this.lotesList = lotesList;
	}

	public Lotes getLoteSelecionado() {
		return loteSelecionado;
	}

	public void setLoteSelecionado(Lotes loteSelecionado) {
		this.loteSelecionado = loteSelecionado;
	}

	public List<SelectItem> getUnidadeLanceList() {
		return unidadeLanceList;
	}

	public void setUnidadeLanceList(List<SelectItem> unidadeLanceList) {
		this.unidadeLanceList = unidadeLanceList;
	}

	public List<SelectItem> getLicitacaoList() {
		return licitacaoList;
	}

	public void setLicitacaoList(List<SelectItem> licitacaoList) {
		this.licitacaoList = licitacaoList;
	}

	public List<SelectItem> getSituacaoList() {
		return situacaoList;
	}

	public void setSituacaoList(List<SelectItem> situacaoList) {
		this.situacaoList = situacaoList;
	}

}
